package com.xwd.dao;

import com.xwd.pojo.Book;

import java.util.List;
import java.util.Map;

/**
 * @ClassName StudentDao
 * @Description: com.xwd.dao
 * @Auther: xiwd
 * @Date: 2022/2/13 - 02 - 13 - 13:11
 * @version: 1.0
 */
public interface BookDao {

    //methods

    /**
     * 查询总的数据条数
     * @param sql SQL语句
     * @param args 占位符参数值
     * @return int-总的数据条数
     */
    public abstract Long findTotalSize(String sql, Object ...args);

    /**
     * 分页查询——根据指定的查询页+查询页的信息条数查询目标数据
     * @param sql SQL语句
     * @param args 占位符参数值
     * @return Student信息的查询列表
     */
    public abstract List<Book> queryList(String sql,Object ...args);



    /*******************************select查询*****************************/
    /**
     * 查询满足条件的单个Book对象
     * @param sql SQL语句
     * @param args 占位符参数
     * @return 查询到的单个Book对象
     */
    public abstract Book queryForObject(String sql,Object... args);


    /**
     * 查询List集合列表
     */
    public abstract List<Book> queryForList(String sql,Object... args);

    /**
     * 查询Map键值对对象
     * @param sql SQL语句
     * @param args 占位符参数
     * @return name-value格式的Map对象
     */
    public abstract Map<String, Object> queryForMap(String sql, Object... args);

    /**
     * 将单个查询结果封装为map对象，并将其全部封装到List集合中
     * @param sql SQL语句
     * @param args 占位符参数
     * @return List<Map>集合对象
     */
    public abstract List<Map<String,Object>> queryForMapList(String sql,Object... args);

    /**
     * 将查询结果的第一条记录的所有属性转为Object[]数组形式返回（列值一一对应）
     * @param sql SQL语句
     * @param args 占位符参数
     * @return 代表查询结果的-Book对象属性的Object[]数组
     */
    public abstract Object[] queryForAttributeArray(String sql,Object... args);


    /**
     * 将查询结果的所有记录的所有属性转为Object[]数组形式返回（列值一一对应）
     * @param sql SQL语句
     * @param args 占位符参数
     * @return 代表查询结果的-Book对象属性的Object[]数组
     */
    public abstract List<Object[]> queryForAttributeArrayList(String sql,Object... args);

    /**
     * ColumnListHandler：将结果集中指定的列的字段值，封装到一个List集合中
     * @param sql SQL语句
     * @param colname 要封装为List集合的列名称
     * @param args 占位符参数
     * @return 代表查询结果的-Book对象属性的List集合
     */
    public abstract Object queryForAttributeList(String sql,String colname, Object... args);


    /**
     * 利用ScalarHandler查询单数据——select count(*) from 表
     * @param sql SQL语句
     * @param args 占位符参数
     * @return 查询到的结果
     */
    public abstract Object queryForCount(String sql,Object... args);


    /*******************************update更新（增加/删除/修改）*****************************/

    /**
     * 新增一本书
     * @param sql SQL语句
     * @param args 占位符参数
     * @return 占位符参数
     */
    public abstract int updateBook(String sql,Object... args);


}
